/*
 * @File:
 * @Author: sjk
 * @Date: 2022-03-06 10:12:08
 * @LastEditTime 2022-04-08 20:22:26
 * @Brief:
 * @Note:自定义电机输出
 */
#include <stdint.h>
#include "types.h"
#include "Motor.h"
//#define __LQINCLUDES_H //不包含龙邱头文件
#include "LQ_PWM.h"
#include "LQ_MotorServo.h"
#include "mykeyboard.h"

/**
 * @Brief: 只初始化需要的两个电机
 * @param {u16} freq
 * @return {*}
 * @Note:      基于MotorInit()
 */
void Motor_myInit(u16 freq)
{
    /*-------------- C8G7 ---------------*/
    PIN_InitConfig(PC8, GPO, 1, GPIO_Mode_Out_PP);
    PIN_InitConfig(PG7, GPO, 1, GPIO_Mode_Out_PP);

    /*-------------- C7G6 ---------------*/
    PIN_InitConfig(PC7, GPO, 1, GPIO_Mode_Out_PP);
    PIN_InitConfig(PG6, GPO, 1, GPIO_Mode_Out_PP);

    /*-------------- C6G5 ---------------*/
     PIN_InitConfig(PC6, GPO, 1, GPIO_Mode_Out_PP);
     PIN_InitConfig(PG5, GPO, 1, GPIO_Mode_Out_PP);

    /*-------------- C9G8 ---------------*/
     PIN_InitConfig(PC9, GPO, 1, GPIO_Mode_Out_PP);
     PIN_InitConfig(PG8, GPO, 1, GPIO_Mode_Out_PP);

    /*--------------- 必须要全部用 ----------------------*/
    PWM_InitConfig(PWM8_CH3_PC8, freq, 1000); //不能换顺序放前面！！！会疯转！！！
    PWM_InitConfig(PWM8_CH2_PC7, freq, 1000); //不能换顺序放前面！！！会疯转！！！
    PWM_InitConfig(PWM8_CH1_PC6, freq, 1000); //我不知道为什么这个也要初始化？？？
    PWM_InitConfig(PWM8_CH4_PC9, freq, 1000); //我不知道为什么这个也要初始化？？？

    Motor(0, 0); //电机先别转
}
/**
 * @Brief: 控制单个电机
 * @param {u8} MotorIO      端口(见头文件宏定义)
 * @param {int16_t} duty    占空比
 * @return {*}
 * @Note:   基于MotorCtrl4w()改造
 *          带有限幅
 */
void Motor_Single(u8 MotorIO, int16_t duty)
{
    set_Bound(duty, Motor_pwmMax); //限幅
    switch (MotorIO)
    {
    case C6G5:
        // PWM:C6  GPIO:G5
        if (duty > 0)
        {
            PWM_Set_Duty(PWM8_CH1_PC6, duty); // C6
            GPIO_ResetBits(MTGPIO1p);         // G5
        }
        else
        {
            PWM_Set_Duty(PWM8_CH1_PC6, 0 - duty);
            GPIO_SetBits(MTGPIO1p);
        }
        break;
    case C7G6:
        // PWM:C7  GPIO:G6
        if (duty > 0)
        {
            PWM_Set_Duty(PWM8_CH2_PC7, duty); // C7
            GPIO_ResetBits(MTGPIO2p);         // G6
        }
        else
        {
            PWM_Set_Duty(PWM8_CH2_PC7, 0 - duty);
            GPIO_SetBits(MTGPIO2p);
        }
        break;
    case C8G7:
        // PWM:C8  GPIO:G7
        if (duty > 0)
        {
            PWM_Set_Duty(PWM8_CH3_PC8, duty); // C8
            GPIO_ResetBits(MTGPIO3p);         // G7
        }
        else
        {
            PWM_Set_Duty(PWM8_CH3_PC8, 0 - duty);
            GPIO_SetBits(MTGPIO3p);
        }
        break;
    // case C9G8:
    //     // PWM:C9  GPIO:G8
    //     if (duty > 0)
    //     {
    //         PWM_Set_Duty(PWM8_CH4_PC9, duty); // C9
    //         GPIO_ResetBits(MTGPIO4p);         // G8
    //     }
    //     else
    //     {
    //         PWM_Set_Duty(PWM8_CH4_PC9, 0 - duty);
    //         GPIO_SetBits(MTGPIO4p);
    //     }
    //     break;
    default:
        break;
    }
}

/**
 * @Brief: 键盘测试电机
 * @param {*}
 * @return {*}
 * @Note:
 */
void Test_myMotor()
{
    int16_t right = 0, left = 0;
    while (1)
    {
        switch (keyboard_Scan())
        {
        case key1:
            left += 500;
            break;
        case key4:
            left -= 500;
            break;
        case key3:
            right += 500;
            break;
        case key6:
            right -= 500;
            break;
        default:
            break;
        }
        OLEDsprint(0, 1, "left :%05d", left);
        OLEDsprint(0, 3, "right:%05d", right);
        Motor(left, right);
    }
}


/**
 * @Date2022-03-27 16:47:49
 * @decription     
 * @author         Tennikl
 * @versions       Ver 1.0
 * @param {*}
 * @return {*}
 */
void Motor_test_vTen()
{
    
}